/*
 * @Author: 徐建辰
 * @LastEditors: 徐建辰
 * @Description: 歌手api请求
 */
const pinyin = require('js-pinyin')
const request = require('./request')

// 获取歌手列表
exports.getSingerList = async () => {
  const HOT = '热'
  const JayZhouPic = 'http://y.gtimg.cn/music/photo_new/T001R800x800M0000025NhlN2yWrP4.jpg'
  let result = {}
  let res = await request({url: 'toplist/artist'})
  if (res.statusCode === 200) {
    let singerList = res.data.list.artists
    singerList[0] = {
      id: 6452,
      name: '周杰伦',
      picUrl: JayZhouPic,
      alias: ['Jay Zhou'],
      picId_str: '',
      img1v1Url: ''
    }
    const singerMap = {
      // 认定前10条数据是热门歌手
      hot: {
        title: HOT,
        list: map(singerList.slice(0, 10))
      }
    }
    // 处理歌手数据（歌手名转拼音）
    singerList.forEach(item => {
      // key即是这个歌手属于那个字母下面
      const key = pinyin.getCamelChars(item.name).substr(0,1)
      if (key) {
        if (!singerMap[key]) {
          singerMap[key] = {
            title: key,
            list: []
          }
        }
        // 每个字母下面会有多名歌手，获取歌手名拼音的首字母
        singerMap[key].list.push(map([item])[0])
      }
      // 热门歌手
      const hot = []
      // 字母歌手
      const letter = []
      // 遍历处理 singerMap，让结果有序
      for (const key in singerMap) {
        const item = singerMap[key]
        if (item.title.match(/[a-zA-Z]/)) {
          letter.push(item)
        } else if (item.title === HOT) {
          hot.push(item)
        }
      }
      // 按字母顺序排序
      letter.sort((a, b) => a.title.charCodeAt(0) - b.title.charCodeAt(0))
      result = {singers: hot.concat(letter)}
    })
    return result
  } else {
    return 'error'
  }
}

// 数据映射，构造单个歌手的数据结构
function map(arr) {
  return arr.map(item => ({
    id: item.id,
    name: item.name,
    pic: item.picUrl,
    alias: item.alias,
    picId_str: item.picId_str,
    img1v1Url: item.img1v1Url
  }))
}